import Vue from 'vue'
import VueRouter from 'vue-router'
//引入进度条nprogress插件
import Nprogress from 'nprogress' // 进度条
import 'nprogress/nprogress.css' //样式必须引入
//导入token验证的方法
import { verifyToken } from '@/api/admin.js'

const originalPush = VueRouter.prototype.push

VueRouter.prototype.push = function push(location) {
  return originalPush.call(this, location).catch(err => err)
}


Vue.use(VueRouter)

const routes = [
  {
    path: '/',
    redirect: '/index'
  },
  {

    path: '/index',
    name: 'Index',
    component: () => import('@/views/Index.vue'),
    meta: { 'title': '首页 | 企鹅售后' },
    // 嵌套路由
    children: [
      //要通过/index默认跳转到Home组件，path:空串
      { path: '', component: () => import('@/views/Home.vue'), meta: { 'title': '首页 | 企鹅售后' } },
      {
        path: 'kb-list',
        component: () => import('@/views/koubei/List.vue'),
        meta: { 'title': '问题列表 | 企鹅售后' }
      },
      {
        path: 'kb-query',
        component: () => import('@/views/koubei/Query.vue'),
        meta: { 'title': '问题查询 | 企鹅售后' }
      },
      {
        path: 'kb-add',
        component: () => import('@/views/koubei/Add.vue'),
        meta: { 'title': '问题添加 | 企鹅售后' }
      },
      {
        path: 'kb-update/:id/:flag',
        component: () => import('@/views/koubei/Update.vue'),
        meta: { 'title': '问题修改 | 企鹅售后' }
      },
      {
        path: 'art-list',
        component: () => import('@/views/article/List.vue'),
        meta: { 'title': '文档列表 | 企鹅售后' }
      },
      {
        path: 'art-add',
        component: () => import('@/views/article/Add.vue'),
        meta: { 'title': '文档添加 | 企鹅售后' }
      },
      {
        path: 'art-detail',
        component: () => import('@/views/article/Detail.vue'),
        meta: { 'title': '文档详情 | 企鹅售后' }
      },
      {
        path: 'art-edit',
        component: () => import('@/views/article/Edit.vue'),
        meta: { 'title': '文档编辑 | 企鹅售后' }
      },
      {
        path: 'admin-modifypwd',
        component: () => import('@/views/admin/Modifypwd.vue'),
        meta: { 'title': '密码修改 | 企鹅售后' }
      },
      {
        path: 'admin-info',
        component: () => import('@/views/admin/UserInfo.vue'),
        meta: { 'title': '用户信息 | 企鹅售后' }
      },
      {
        path: 'admin-modifyAvatar',
        component: () => import('@/views/admin/UpdateAvatar.vue'),
        meta: { 'title': '上传头像 | 企鹅售后' }
      },
      {
        path: 'map-chinaPerson',
        component: () => import('@/views/map/ChinaPersonMap.vue'),
        meta: { 'title': '中国人口分布 | 企鹅售后' }
      },
      {
        path: 'map-txMap',
        component: () => import('@/views/map/TXMap.vue'),
        meta: { 'title': '腾讯地图 | 企鹅售后' }
      },
    ]
  },
  {
    path: '/login',
    name: 'Login',
    // 路由懒加载方式配置路由
    component: () => import(/* webpackChunkName: "about" */ '@/views/admin/Login.vue'),
    meta: { 'title': '登录 | 企鹅售后' }
  },
  {
    path: '/register',
    name: 'Register',
    component: () => import('@/views/admin/Register.vue'),
    meta: { 'title': '注册 | 企鹅售后' }
  }
]

const router = new VueRouter({
  mode: 'history',
  // mode: 'hash',
  base: process.env.BASE_URL,
  routes
})


//导航守卫 路由对象创建完成之后才能添加
//全局路由前置守卫：当一个导航触发时，触发全局前置守卫
//to:即将进入的路由对象（下一个路由）  from: 当前正要离开的路由(上一个路由)  next:(方法) 放行
router.beforeEach((to, from, next) => {
  //修改页面的标题 <title></title>
  window.document.title = to.meta.title;
  //启动进度条
  Nprogress.start();
  //设置进度条初始百分比
  Nprogress.set(0.3);
  //1.登录和注册不需要权限验证都能进入的
  // console.log(to, from);
  if (to.path === '/login' || to.path === '/register') {
    next()
  } else {
    //2.对于除登录注册意外的其它所有路由，都需要权限控制，如果本地存储中token在服务器验证通过，才能放行(next)，否则不放行
    //发起请求去服务器验证
    verifyToken()
      .then(res => {
        // console.log(res)
        if (res.data.code === 0) {
          //token正确，放行
          next()
        } else if (res.data.code === 1) {
          // alert('token不存在')

          //返回登录页面
          router.push('/login')
        } else if (res.data.code === 2) {
          // alert('token有误或过期')
          //返回登录页面
          router.push('/login')
        }

      })
      .catch(err => {
        console.error(err);
      })
  }



})

//路由全局后置守卫afterEach()
router.afterEach((to, from) => {
  //结束进度条
  Nprogress.done()
})

export default router
